home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Reference / the cmsp digests ('94-'97) / csmp digest Vol 3 No 024 < prev    next >
Internet Message Format  |  1997-05-06  |  71KB

  1. From: pottier@clipper.ens.fr (Francois Pottier)
  2. Subject: csmp-digest-v3-024
  3. Date: Sat, 7 May 94 13:07:29 MET DST
  4.  
  5. C.S.M.P. Digest             Sat, 07 May 94       Volume 3 : Issue 24
  6.  
  7. Today's Topics:
  8.  
  9.         Anyone have routine for random numbers?
  10.         Async CD-ROM Drivers?
  11.         Comparing 2 LongDateTime's
  12.         Copying graphics the fast way (in assembler)
  13.         Favorite C++ Book?
  14.         Native PPC Interrupt Control?
  15.         SetDialogDefaultItem in a modal dialog
  16.         Symantec has an FTP site!
  17.         pascal and c libraries
  18.  
  19.  
  20.  
  21. The Comp.Sys.Mac.Programmer Digest is moderated by Francois Pottier
  22. (pottier@clipper.ens.fr).
  23.  
  24. The digest is a collection of article threads from the internet newsgroup
  25. comp.sys.mac.programmer.  It is designed for people who read c.s.m.p. semi-
  26. regularly and want an archive of the discussions.  If you don't know what a
  27. newsgroup is, you probably don't have access to it.  Ask your systems
  28. administrator(s) for details.  If you don't have access to news, you may
  29. still be able to post messages to the group by using a mail server like
  30. anon.penet.fi (mail help@anon.penet.fi for more information).
  31.  
  32. Each issue of the digest contains one or more sets of articles (called
  33. threads), with each set corresponding to a 'discussion' of a particular
  34. subject.  The articles are not edited; all articles included in this digest
  35. are in their original posted form (as received by our news server at
  36. nef.ens.fr).  Article threads are not added to the digest until the last
  37. article added to the thread is at least two weeks old (this is to ensure that
  38. the thread is dead before adding it to the digest).  Article threads that
  39. consist of only one message are generally not included in the digest.
  40.  
  41. The digest is officially distributed by two means, by email and ftp.
  42.  
  43. If you want to receive the digest by mail, send email to listserv@ens.fr
  44. with no subject and one of the following commands as body:
  45.     help                        Sends you a summary of commands
  46.     subscribe csmp-digest Your Name    Adds you to the mailing list
  47.     signoff csmp-digest            Removes you from the list
  48. Once you have subscribed, you will automatically receive each new
  49. issue as it is created.
  50.  
  51. The official ftp info is //ftp.dartmouth.edu/pub/csmp-digest.
  52. Questions related to the ftp site should be directed to
  53. scott.silver@dartmouth.edu. Currently no previous volumes of the CSMP
  54. digest are available there.
  55.  
  56. Also, the digests are available to WAIS users as comp.sys.mac.programmer.src.
  57.  
  58.  
  59. -------------------------------------------------------
  60.  
  61. >From truo8166@silver.SJSU.EDU (Thai Binh Truong)
  62. Subject: Anyone have routine for random numbers?
  63. Date: 21 Apr 94 20:47:04 GMT
  64. Organization: San Jose State University - Math/CS Dept.
  65.  
  66. I'm looking for a routine that will generate
  67. normally distributed random numbers.  If anyone
  68. know of any other routines that comes close to
  69. it, please post. Thanks in advance.
  70.  
  71. -Thai
  72.  
  73.  
  74. +++++++++++++++++++++++++++
  75.  
  76. >From Jim Conner <jc30@cornell.edu>
  77. Date: 22 Apr 1994 16:00:20 GMT
  78. Organization: Cornell University
  79.  
  80. Subject: Anyone have routine for random numbers?
  81. From: Thai Binh Truong, truo8166@silver.SJSU.EDU
  82. Date: 21 Apr 94 20:47:04 GMT
  83. In article <truo8166.766961224@sjsumcs.sjsu.edu> Thai Binh Truong,
  84. truo8166@silver.SJSU.EDU writes:
  85. >I'm looking for a routine that will generate
  86. >normally distributed random numbers.  If anyone
  87. >know of any other routines that comes close to
  88. >it, please post. Thanks in advance.
  89. >
  90. >-Thai
  91. >
  92.  
  93. Try looking in Numerical Recipes in Pascal (or C or Fortran, take your
  94. pick).  Each book in this set has several routines for generating uniform
  95. deviates as well as other types of distributions.  The routine for
  96. normally distributed random numbers looks like this (in Pascal):
  97.  
  98. { Global stuff... }
  99. GasdevIset: integer;
  100. GasdevGset: real;
  101. begin
  102.     GasdevIset := 0;
  103.  
  104. { Returns a normally distributed deviate with zero mean and unit
  105. variance,     }
  106. { using UniDev as the source of uniform deviates.                        
  107.        }
  108.  
  109.  function gasdev: extended;
  110.   var
  111.    fac, r, v1, v2: extended;
  112.  
  113.  begin
  114.   if GasdevIset = 0 then
  115.    begin
  116.     repeat
  117.      v1 := 2.0 * UniDev - 1.0;
  118.      v2 := 2.0 * UniDev - 1.0;
  119.      r := sqr(v1) + sqr(v2);
  120.     until (r < 1.0) and (r > 0.0);
  121.     fac := sqrt(-2.0 * ln(r) / r);
  122.     GasdevGset := v1 * fac;
  123.     gasdev := v2 * fac;
  124.     GasdevIset := 1
  125.    end
  126.   else
  127.    begin
  128.     GasdevIset := 0;
  129.     gasdev := GasdevGset;
  130.    end
  131.  end;
  132.  
  133. See Numerical Recipes for more details.
  134.  
  135. Jim Conner
  136.  
  137. +++++++++++++++++++++++++++
  138.  
  139. >From AppleGG@lamg.com (Gordon Apple)
  140. Date: 22 Apr 1994 11:55:56 -0800
  141. Organization: (none)
  142.  
  143. I'm looking for a routine that will generate
  144. normally distributed random numbers.  If anyone
  145. know of any other routines that comes close to
  146. it, please post. Thanks in advance.
  147.  
  148.  
  149.       I don't have the exact algorithms handy, but here are a couple of
  150. suggestions (assuming you already have a good uniformly distributed random
  151. number generator):
  152.  
  153.      If you are just doing things like usual statistics, then the simplest
  154. way is to generate a series of uniformly distributed variables and average
  155. them.  Even small series like 16 or so will give you very good results.
  156.  
  157.      If you're working far out on the tail (5 or 10 standard deviations),
  158. such as is often the case when working statistical communications problems,
  159. you need something better.  One of the best methods we found for our
  160. simulations was to take a pair of uniformly distributed random variables and
  161. use them to generate a pair of Gaussion rvs.  To do this, you need to use an
  162. exponential to map one variable into a Rayleigh amplitude distribution.  Use
  163. the other to generate a random angle from 0 to 2 * Pi.  Use sin and cos to
  164. get the two (independent) Gaussians.  Works great.  I've used it for years.
  165.  
  166. G. Gordon Apple, PhD
  167. Advanced ommunications Engineering, Inc.
  168. Redondo Beach, CA
  169.  
  170. +++++++++++++++++++++++++++
  171.  
  172. >From afcjlloyd@aol.com (AFC JLloyd)
  173. Date: 22 Apr 1994 19:52:06 -0400
  174. Organization: America Online, Inc. (1-800-827-6364)
  175.  
  176. In article <505016286.7954988@lamgnet.lamg.com>, AppleGG@lamg.com (Gordon
  177. Apple) writes:
  178.  
  179. >>>
  180.      If you're working far out on the tail (5 or 10 standard deviations),
  181. such as is often the case when working statistical communications problems,
  182. you need something better.  One of the best methods we found for our
  183. simulations was to take a pair of uniformly distributed random variables and
  184. use them to generate a pair of Gaussion rvs.  To do this, you need to use an
  185. exponential to map one variable into a Rayleigh amplitude distribution.  Use
  186. the other to generate a random angle from 0 to 2 * Pi.  Use sin and cos to
  187. get the two (independent) Gaussians.  Works great.  I've used it for years.
  188. <<<
  189.  
  190. Code to implement this technique can be found in "Numerical Recipes in C".
  191. The code given manages to avoid calling sin() and cos(), but it does require
  192. a log() and a sqrt() (and a float divide).  Here's the basic code:
  193.  
  194. do {
  195.    v1 = 2.0*ran() - 1.0;
  196.    v2 = 2.0*ran() - 1.0;
  197.    r = v1*v1 + v2*v2;
  198. } while (r >= 1.0);
  199. fac = sqrt(-2.0*log(r)/r);
  200.  
  201. ran() is a function returning a uniform deviate in the range 0.0 .. 1.0.
  202. After computing the above, you can now get two independent normal deviates
  203. by returning v1*fac and v2*fac.  The deviates have zero mean and unit variance.
  204.  
  205. Jim Lloyd
  206. afcjlloyd@aol.com
  207.  
  208.  
  209. ---------------------------
  210.  
  211. >From siegel@netcom.com (Rich Siegel)
  212. Subject: Async CD-ROM Drivers?
  213. Date: Wed, 13 Apr 1994 21:46:18 GMT
  214. Organization: Bare Bones Software
  215.  
  216.  
  217. (This is a philosophical question. If you can't spell "philosophy",
  218. you're excused. :-])
  219.  
  220. A number of us, having nothing better to do, were idly wondering about
  221. the pros and cons of the new SCSI Manager. One of its benefits is the
  222. ability to disconnect and reconnect (provided the device supports it),
  223. which leads directly to the ability for a driver to support async I/O
  224. operations.
  225.  
  226. This obviously works well for high-speed SCSI devices and copying.
  227. You can also perform some SCSI operations such as a format
  228. asynchronously at the application level (drivers rarely, if ever, need
  229. to format a disk); the app can issue the format, disconnect, and then
  230. handle UA and reconnect.
  231.  
  232. However, my colleagues and I can't pin down and specific technical
  233. benefits, besides the pure sex appeal, for supporting async I/O in a
  234. CD-ROM driver.
  235.  
  236. Are we missing something? Can someone, or several someones, enumerate
  237. the specific benefits for supporting async SCSI operation for CD-ROM
  238. drives?
  239.  
  240. For the benefit of all, please post to this newsgroup.
  241.  
  242. R.
  243.  
  244. -- 
  245. Rich Siegel % siegel@netcom.com    % Principal, Bare Bones Software
  246. --> For information about BBEdit, finger bbedit@world.std.com <--
  247.  
  248. "...yeah, I inhaled, and then I drank the bong water. So what're
  249. you gonna do about it?" - Dennis Miller, on Bill Clinton
  250.  
  251. +++++++++++++++++++++++++++
  252.  
  253. >From resnick@cogsci.uiuc.edu (Pete Resnick)
  254. Date: Thu, 14 Apr 1994 00:25:43 -0500
  255. Organization: University of Illinois at Urbana-Champaign
  256.  
  257. In article <siegelCo7wH7.Lu5@netcom.com>, siegel@netcom.com (Rich Siegel) wrote:
  258.  
  259. >(This is a philosophical question. If you can't spell "philosophy",
  260. >you're excused. :-])
  261.  
  262. I think I can spell it pretty well.
  263.  
  264. >This obviously works well for high-speed SCSI devices and copying.
  265.  
  266. Why does anyone care about async I/O on a high-speed device other than
  267. pure sex appeal? On a high-speed device, I/O should happen so quickly that
  268. calling it async should have no effect to your program.
  269.  
  270. >However, my colleagues and I can't pin down and specific technical
  271. >benefits, besides the pure sex appeal, for supporting async I/O in a
  272. >CD-ROM driver.
  273. >
  274. >Are we missing something? Can someone, or several someones, enumerate
  275. >the specific benefits for supporting async SCSI operation for CD-ROM
  276. >drives?
  277.  
  278. The best reason for any async I/O on any device is multitasking. It drives
  279. me absolutely bananas that FSRead is written synchronously, because to
  280. read 1 Meg at a time, people call:
  281.  
  282.         buffPtr = NewPtr(1000000);
  283.         count = 1000000;
  284.         FSRead(refNum, &count, buffPtr);
  285.  
  286. This is ESPECIALLY horrible on a slow device, and worst over the network
  287. (consider going over a 9600 bps ARA link). Why can't people do it right
  288. and say:
  289.  
  290.         paramBlock->ioParam.ioCompletion = nil;
  291.         paramBlock->ioParam.ioRefNum = refNum;
  292.         paramBlock->ioParam.ioBuffer = NewPtr(1000000);
  293.         paramBlock->ioParam.ioReqCount = 1000000;
  294.         PBReadAsync(paramBlock);
  295.         while(paramBlock->ioParam.ioResult > noErr)
  296.             HandleEvents();
  297.  
  298. So, the reason that a CD-ROM drive should have async I/O is exactly
  299. because the damn things are slow. In all honesty, I don't see that there
  300. is any other reason to have async I/O except to allow you to call your
  301. event loop during I/O operations. Everything else is secondary.
  302.  
  303. Personally, I wish that FSRead called _Read asynchronously and provided a
  304. filterProc which could continue to receive events while the damn read was
  305. going on.
  306.  
  307. I am driven almost to tears every time I try to get anything done while
  308. doing copies in the Finder (which, contrary to its documentation, can't do
  309. a background copy to save its life) from a slow device because my machine
  310. either comes to a complete screeching halt or behaves so poorly that I
  311. can't get anything done (like typing a news article).
  312.  
  313. CD-ROM's should have async I/O before any device which is faster.
  314.  
  315. pr
  316. -- 
  317. Pete Resnick        (...so what is a mojo, and why would one be rising?)
  318. Graduate assistant - Philosophy Department, Gregory Hall, UIUC
  319. System manager - Cognitive Science Group, Beckman Institute, UIUC
  320. Internet: resnick@cogsci.uiuc.edu
  321.  
  322. +++++++++++++++++++++++++++
  323.  
  324. >From zobkiw@datawatch.com (joe zobkiw)
  325. Date: Thu, 14 Apr 1994 13:20:42 GMT
  326. Organization: Datawatch Corporation
  327.  
  328. In article <resnick-140494002543@ruger-6.slip.uiuc.edu>,
  329. resnick@cogsci.uiuc.edu (Pete Resnick) wrote:
  330.  
  331. > CD-ROM's should have async I/O before any device which is faster.
  332.  
  333. Don't forget floppy disks...believe it or not...some people still use them!
  334. :)
  335.  
  336. ___________________________________________________________
  337. _/_/_/_/   Joe Zobkiw                                   ,,,
  338.     _/     Senior Software Engineer                     - -
  339.   _/       Datawatch Corporation                         L
  340. _/_/_/_/   zobkiw@datawatch.com                          -
  341.  
  342. +++++++++++++++++++++++++++
  343.  
  344. >From rmcassid@uci.edu (Robert Cassidy)
  345. Date: Thu, 14 Apr 1994 10:23:20 -0700
  346. Organization: TLG Project
  347.  
  348. In article <siegelCo7wH7.Lu5@netcom.com>, siegel@netcom.com (Rich Siegel)
  349. wrote:
  350.  
  351. > (This is a philosophical question. If you can't spell "philosophy",
  352. > you're excused. :-])
  353. > A number of us, having nothing better to do, were idly wondering about
  354. > the pros and cons of the new SCSI Manager. One of its benefits is the
  355. > ability to disconnect and reconnect (provided the device supports it),
  356. > which leads directly to the ability for a driver to support async I/O
  357. > operations.
  358. > This obviously works well for high-speed SCSI devices and copying.
  359. > You can also perform some SCSI operations such as a format
  360. > asynchronously at the application level (drivers rarely, if ever, need
  361. > to format a disk); the app can issue the format, disconnect, and then
  362. > handle UA and reconnect.
  363. > However, my colleagues and I can't pin down and specific technical
  364. > benefits, besides the pure sex appeal, for supporting async I/O in a
  365. > CD-ROM driver.
  366. > Are we missing something? Can someone, or several someones, enumerate
  367. > the specific benefits for supporting async SCSI operation for CD-ROM
  368. > drives?
  369. > For the benefit of all, please post to this newsgroup.
  370.  
  371. Well, here's a prime example. I work in a place where we take ancient Greek
  372. writings (all of 'em) and encode them on CD-ROM. We sent our our first CD
  373. about 8 years ago - we were one of the first. The CD contains about 500MB
  374. of data, and only about 20MB of indices :-(  As the first CD's were going
  375. out a decision was made to create a machine dedicated to searching through
  376. our CD looking for particular instances of words. The machine was based on
  377. an 8MHz 68000 but at 8MHz it was just fast enough to search data at the
  378. same rate that it came in (asynchronously) from the CD-ROM drive
  379. (150K/sec). The whole process takes about 50 minutes.
  380.  
  381. Most users of our CD are Mac users (~50% worldwide). My Q800 with a 300CD
  382. can search the CD in exactly the same amount of time as the 68000 above
  383. because there is no asynchrounous. I've determined that if I rewrote the
  384. Mac search programs (And I just might) that I would have the following
  385. results:
  386.  
  387. For a full search (500MB)
  388.  
  389.                       running time          processing time
  390. PM6100 async         ~30min                                                                <5min
  391. PM6100 sync          ~35min                ~35min
  392.  
  393. The running time (when the program starts to when the program quits)
  394. doesn't change much - but the processing time (how much I can't give back
  395. to the system) drops drastically. So in 30 minutes (a lot of time in my
  396. opinion) the user can recover 25 of it for other things and probably won't
  397. even know the background task is running.
  398.  
  399. Just for measure. We have an HP1000 that most of our work is done on. It
  400. takes about 6 hours for a full search with no other users on the system. A
  401. PM8100 working asynchronously from HD could do it in under 5 min.
  402.  
  403. -- 
  404. Robert Cassidy
  405. TLG Project
  406. UC Irvine
  407.  
  408. Let's hope 'Information SuperTollroad' isn't the catchphrase of the next
  409. decade...
  410.  
  411. +++++++++++++++++++++++++++
  412.  
  413. >From rang@winternet.mpls.mn.us (Anton Rang)
  414. Date: 15 Apr 1994 00:13:30 GMT
  415. Organization: Minnesota Angsters
  416.  
  417. In article <zobkiw-140494082042@zobkiw.datawatch.com> zobkiw@datawatch.com (joe zobkiw) writes:
  418. >In article <resnick-140494002543@ruger-6.slip.uiuc.edu>,
  419. >resnick@cogsci.uiuc.edu (Pete Resnick) wrote:
  420. >> 
  421. >> CD-ROM's should have async I/O before any device which is faster.
  422. >> 
  423. >
  424. >Don't forget floppy disks...believe it or not...some people still use them!
  425. >:)
  426.  
  427.   But they've had asynchronous I/O since the very first Macs!
  428.  
  429.   (Believe it or not....)
  430. --
  431. Anton Rang (rang@winternet.mpls.mn.us)
  432.  
  433. +++++++++++++++++++++++++++
  434.  
  435. >From Steve Bryan <sbryan@maroon.tc.umn.edu>
  436. Date: Sun, 17 Apr 1994 16:47:49 GMT
  437. Organization: Sexton Software
  438.  
  439. In article <zobkiw-140494082042@zobkiw.datawatch.com> joe zobkiw,
  440. zobkiw@datawatch.com writes:
  441. >Don't forget floppy disks...believe it or not...some people still use
  442. them!
  443.  
  444. I was under the impression that the driver for the floppy drive was (and
  445. has been) asynchronous. The fact that it disables interrupts causing
  446. mouse movement to become eratic diminishes the possible benefit of being
  447. asynchronous.
  448. Steve Bryan                  InterNet: sbryan@maroon.tc.umn.edu
  449. Sexton Software            CompuServe: 76545,527
  450. Minneapolis, MN                   Fax: (612) 929-1799
  451.  
  452. +++++++++++++++++++++++++++
  453.  
  454. >From Brad Koehn <koehn@macc.wisc.edu>
  455. Date: 18 Apr 1994 02:32:37 GMT
  456. Organization: University of Wisconsin
  457.  
  458. In article <zobkiw-140494082042@zobkiw.datawatch.com> joe zobkiw,
  459. zobkiw@datawatch.com writes:
  460. >> 
  461. >> CD-ROM's should have async I/O before any device which is faster.
  462. >> 
  463. >
  464. >Don't forget floppy disks...believe it or not...some people still use
  465. them!
  466. >:)
  467.  
  468. Floppy I/O is asynchronous, check out a copy of Disk Charmer. It lets you
  469. format floppies in the background. It's pretty chunky on my Duo, but it
  470. works perfectly on a PPC.
  471.  
  472. _________________________________________________________________________
  473. Brad Koehn          Data Transformations, Inc.        koehn@macc.wisc.edu
  474.  
  475. +++++++++++++++++++++++++++
  476.  
  477. >From bell@apple.com (Mike Bell)
  478. Date: Wed, 20 Apr 1994 17:34:46 GMT
  479. Organization: Apple Computer, Inc.
  480.  
  481. In article <siegelCo7wH7.Lu5@netcom.com>, siegel@netcom.com (Rich Siegel) 
  482. writes:
  483. > Newsgroups: comp.sys.mac.programmer 
  484. > Path: gallant.apple.com!apple.com!taligent!ames!hookup!swrinde!ihnp4.
  485. > ucsd.edu!library.ucla.edu!news.ucdavis.edu!csus.edu!netcom.com!siegel 
  486. > From: siegel@netcom.com (Rich Siegel) 
  487. > Subject: Async CD-ROM Drivers? 
  488. > Message-ID: <siegelCo7wH7.Lu5@netcom.com> 
  489. > Organization: Bare Bones Software 
  490. > Date: Wed, 13 Apr 1994 21:46:18 GMT 
  491. > Lines: 33 
  492. > (This is a philosophical question. If you can't spell "philosophy", you'
  493. > re excused. :-]) 
  494. > A number of us, having nothing better to do, were idly wondering about 
  495. > the pros and cons of the new SCSI Manager. One of its benefits is the 
  496. > ability to disconnect and reconnect (provided the device supports it), 
  497. > which leads directly to the ability for a driver to support async I/O 
  498. > operations. 
  499. > This obviously works well for high-speed SCSI devices and copying. 
  500. > You can also perform some SCSI operations such as a format 
  501. > asynchronously at the application level (drivers rarely, if ever, need 
  502. > to format a disk); the app can issue the format, disconnect, and then 
  503. > handle UA and reconnect. 
  504. > However, my colleagues and I can't pin down and specific technical 
  505. > benefits, besides the pure sex appeal, for supporting async I/O in a 
  506. > CD-ROM driver. 
  507. > Are we missing something? Can someone, or several someones, enumerate 
  508. > the specific benefits for supporting async SCSI operation for CD-ROM 
  509. > drives? 
  510. > For the benefit of all, please post to this newsgroup. 
  511. > R. 
  512. > -- 
  513. > Rich Siegel % siegel@netcom.com    % Principal, Bare Bones Software 
  514. > --> For information about BBEdit, finger bbedit@world.std.com <-- 
  515. > "...yeah, I inhaled, and then I drank the bong water. So what're 
  516. > you gonna do about it?" - Dennis Miller, on Bill Clinton 
  517. >  
  518.  
  519.  
  520.  Having async I/O in a CD ROM driver is very useful. It allows you to do 
  521. something with the data that you just read while simultaneously reading 
  522. another chunk off of the SLOW CD ROM drive. So, if a program is smart enough 
  523. to use multiple async reads from disc, effective throughput is greatly 
  524. increased by the async driver.
  525.  
  526.     
  527.      -Mike
  528.  
  529.  
  530.  
  531.     
  532.  
  533.  
  534. ****************************************************************************
  535. Mike Bell                                                     email: bell@apple.com
  536. Rock and Roll Project
  537. 2 Infinite Loop    MS: 302-3SB
  538. Cupertino, CA  95014
  539.  
  540.  
  541.  
  542. +++++++++++++++++++++++++++
  543.  
  544. >From jens_alfke@powertalk.apple.com (Jens Alfke)
  545. Date: 21 Apr 94 01:03:58 GMT
  546. Organization: Apple Computer
  547.  
  548. Pete Resnick, resnick@cogsci.uiuc.edu writes:
  549. > Why does anyone care about async I/O on a high-speed device other than
  550. > pure sex appeal? On a high-speed device, I/O should happen so quickly that
  551. > calling it async should have no effect to your program.
  552.  
  553. By those standards I guess a RAM disk might qualify as "high speed" but not
  554. anything else! My hard disk has a 14ms access time, and think of how much the
  555. 25MHz 040 in my now-lowly Quadra 700 could get done during those 350,000
  556. clock cycles.
  557.  
  558. I was under the impression that the CD-ROM driver already did async I/O.
  559. Doesn't QuickTime decode and render one frame while it's reading the next one
  560. from the disk?
  561.  
  562. > I am driven almost to tears every time I try to get anything done while
  563. > doing copies in the Finder (which, contrary to its documentation, can't do
  564. > a background copy to save its life) from a slow device because my machine
  565. > either comes to a complete screeching halt or behaves so poorly that I
  566. > can't get anything done (like typing a news article).
  567.  
  568. You need the "ALLRight" utilities from MSA software. It has a background
  569. copying feature (which used to be a standalone utility called COPYright) that
  570. makes copies a breeze. Finder copies are forwarded to a small app that runs
  571. in the background. It does all its I/O asynchronously, with little CPU
  572. hogging even when copying to/from a floppy, a slow file server, or over ARA.
  573. It'll do multiple copies at a time, too.
  574. The other utilities in the package are not too original (a Helium clone, a
  575. very weak SuperBoomerang clone, a BeHierarchic clone, etc.) and have some
  576. serious bugs, but the copy utility is worth the price of the package.
  577.  
  578. --Jens Alfke
  579.   jens_alfke@powertalk              Rebel girl, rebel girl,
  580.             .apple.com              Rebel girl you are the queen of my world
  581.  
  582. +++++++++++++++++++++++++++
  583.  
  584. >From resnick@cogsci.uiuc.edu (Pete Resnick)
  585. Date: Wed, 20 Apr 1994 21:47:49 -0500
  586. Organization: University of Illinois at Urbana-Champaign
  587.  
  588. In article <1994Apr21.010358.20490@gallant.apple.com>,
  589. jens_alfke@powertalk.apple.com (Jens Alfke) wrote:
  590.  
  591. >Pete Resnick, resnick@cogsci.uiuc.edu writes:
  592. >> Why does anyone care about async I/O on a high-speed device other than
  593. >> pure sex appeal? On a high-speed device, I/O should happen so quickly that
  594. >> calling it async should have no effect to your program.
  595. >
  596. >By those standards I guess a RAM disk might qualify as "high speed" but not
  597. >anything else! My hard disk has a 14ms access time, and think of how much the
  598. >25MHz 040 in my now-lowly Quadra 700 could get done during those 350,000
  599. >clock cycles.
  600.  
  601. I agree completely. I was just playing with what Rich Siegel said. Every
  602. external device should support asynchronous I/O because every external
  603. device is going to be really slow.
  604.  
  605. >> I am driven almost to tears every time I try to get anything done while
  606. >> doing copies in the Finder (which, contrary to its documentation, can't do
  607. >> a background copy to save its life) from a slow device because my machine
  608. >> either comes to a complete screeching halt or behaves so poorly that I
  609. >> can't get anything done (like typing a news article).
  610. >
  611. >You need the "ALLRight" utilities from MSA software. It has a background
  612. >copying feature (which used to be a standalone utility called COPYright) that
  613. >makes copies a breeze. Finder copies are forwarded to a small app that runs
  614. >in the background. It does all its I/O asynchronously, with little CPU
  615. >hogging even when copying to/from a floppy, a slow file server, or over ARA.
  616. >It'll do multiple copies at a time, too.
  617.  
  618. But why can't the Finder do this?? Why is it that I need yet another patch
  619. trapping, memory using (no matter how small) extra utility that does
  620. something that could be done infinitely more easily in the Finder, which
  621. should have done it in the first place? The code to write this into the
  622. Finder itself is trivial. This is just a case of sloppy programming that
  623. needs to be fixed, not extra functionality that a third-party program
  624. should be solving.
  625.  
  626. pr
  627. -- 
  628. Pete Resnick        (...so what is a mojo, and why would one be rising?)
  629. Graduate assistant - Philosophy Department, Gregory Hall, UIUC
  630. System manager - Cognitive Science Group, Beckman Institute, UIUC
  631. Internet: resnick@cogsci.uiuc.edu
  632.  
  633. +++++++++++++++++++++++++++
  634.  
  635. >From rmcassid@uci.edu (Robert Cassidy)
  636. Date: Thu, 21 Apr 1994 12:19:25 -0800
  637. Organization: TLG Project
  638.  
  639. In article <resnick-200494214749@resnick.isdn.uiuc.edu>,
  640. resnick@cogsci.uiuc.edu (Pete Resnick) wrote:
  641.  
  642. [stuff deleted]
  643.  
  644. > >> I am driven almost to tears every time I try to get anything done while
  645. > >> doing copies in the Finder (which, contrary to its documentation, can't do
  646. > >> a background copy to save its life) from a slow device because my machine
  647. > >> either comes to a complete screeching halt or behaves so poorly that I
  648. > >> can't get anything done (like typing a news article).
  649. > >
  650. > >You need the "ALLRight" utilities from MSA software. It has a background
  651. > >copying feature (which used to be a standalone utility called COPYright) that
  652. > >makes copies a breeze. Finder copies are forwarded to a small app that runs
  653. > >in the background. It does all its I/O asynchronously, with little CPU
  654. > >hogging even when copying to/from a floppy, a slow file server, or over ARA.
  655. > >It'll do multiple copies at a time, too.
  656.  
  657. Well, not to be an ass or anything but COPYright and Copydoubler don't
  658. always (do they ever) do asynchronous I/O. Those programs work on my Color
  659. Classic and it doesn't support asynch I/O to SCSI. They do their magic just
  660. in stolen cycles  (it's much slower in the background than in the
  661. forground) and actually do their work synchronously (at least on non 040
  662. machines). I know it's picking nits but it is an async discussion...
  663.  
  664. > But why can't the Finder do this?? Why is it that I need yet another patch
  665. > trapping, memory using (no matter how small) extra utility that does
  666. > something that could be done infinitely more easily in the Finder, which
  667. > should have done it in the first place? The code to write this into the
  668. > Finder itself is trivial. This is just a case of sloppy programming that
  669. > needs to be fixed, not extra functionality that a third-party program
  670. > should be solving.
  671.  
  672. Apple has been avoiding this situation in its more recent software
  673. (Powertalk at least) in that Powertalk runs as an appe instead of some big
  674. hunk of the system. That way it takes cycles just like any app. I think the
  675. biggest thing the Mac needs at this time is a threaded OS - spin the
  676. copying off on a thread - formatting floppies - launching apps - etc. etc.
  677. Apple has done really well in some things and poorly in others, Powertalk
  678. is *wonderful* in this regard, PrintMonitor is good, but the finder stuff
  679. _rots_. Isn't Apple working on a rewrite of the Finder, though? I thought I
  680. heard rumors of that for 7.8 or something (I don't think it is planned for
  681. 7.5)
  682.  
  683. -- 
  684. Robert Cassidy
  685. TLG Project
  686. UC Irvine
  687.  
  688. Let's hope 'Information SuperTollroad' isn't the catchphrase of the next
  689. decade...
  690.  
  691. +++++++++++++++++++++++++++
  692.  
  693. >From rang@winternet.mpls.mn.us (Anton Rang)
  694. Date: 21 Apr 1994 05:54:04 GMT
  695. Organization: Minnesota Angsters
  696.  
  697. In article <9404200934.AA46914@Sort-of-a-900.Apple.com> bell@apple.com (Mike Bell) writes:
  698. > Having async I/O in a CD ROM driver is very useful. It allows you to do 
  699. >something with the data that you just read while simultaneously reading 
  700. >another chunk off of the SLOW CD ROM drive. So, if a program is smart enough 
  701. >to use multiple async reads from disc, effective throughput is greatly 
  702. >increased by the async driver.
  703.  
  704.   In particular, newer QuickTime versions (from 1.5 or 1.6, I forget
  705. which) take advantage of this to overlap i/o and decompression....
  706. --
  707. Anton Rang (rang@winternet.mpls.mn.us)
  708.  
  709. ---------------------------
  710.  
  711. >From srussell@reed.edu (Steven J. Russell)
  712. Subject: Comparing 2 LongDateTime's
  713. Date: 19 Apr 1994 21:08:02 GMT
  714. Organization: Reed College,  Portland, Oregon
  715.  
  716.  
  717. I have a routine that compares two LongDateTime variables and tells me
  718. if the first one is before the second one.  Unfortunately, it converts
  719. the LongDateTime types to LongDateRec types via LongSecs2Date and then
  720. compares the old date format values, branching out at the appropriate
  721. moment.
  722.  
  723. What I would like to do is skip the conversion to LongDateRec's and then
  724. compare the LongDateTime variables that are passed in.  Inside Mac: Text
  725. says that the LongDateTime is a 64-bit signed representation of the number
  726. of seconds since Jan 1, 1904.  So, I check the high-bit of both and compare
  727. the high-order and low-order longs.  Seems to work most of the time.  However,
  728. I get LongDateTime values that are negative using this scheme (high-order bit
  729. set) sometimes even though the date is, for instance, 18 April 1994!
  730.  
  731. Does anybody have code to compare LongDateTime's directly without conversion?
  732.  
  733. BTW, I am doing this for a speed optimization, sincemy program compares dates
  734. and times frequently.
  735.  
  736. Thanks,
  737. Steven Russell
  738. srussell@reed.edu
  739.  
  740. +++++++++++++++++++++++++++
  741.  
  742. >From resnick@cogsci.uiuc.edu (Pete Resnick)
  743. Date: Wed, 20 Apr 1994 00:28:41 -0500
  744. Organization: University of Illinois at Urbana-Champaign
  745.  
  746. In article <2p1h7i$kk9@scratchy.reed.edu>, srussell@reed.edu (Steven J.
  747. Russell) wrote:
  748.  
  749. >What I would like to do is skip the conversion to LongDateRec's and then
  750. >compare the LongDateTime variables that are passed in.
  751.  
  752. This should be pretty easy. In Script.h is a typedef for LongDateCvt,
  753. which gives you the high and low long of each. Here's a routine that
  754. returns 1 if the first is greater, -1 if the first is less than, and 0 if
  755. the first is equal to the second:
  756.  
  757. short CompareLongDate(LongDateTime *time1, LongDateTime *time2)
  758. {
  759.     LongDateCvt temp1, temp2;
  760.     short returnVal;
  761.  
  762.     temp1.c = *time1;
  763.     temp2.c = *time2;
  764.     if(temp1.hl.lHigh > temp2.hl.lHigh) {
  765.         returnVal = 1;
  766.     } else if(temp1.hl.lHigh < temp2.hl.lHigh) {
  767.         returnVal =  -1;
  768.     } else {
  769.         if(temp1.hl.lLow > temp2.hl.lLow) {
  770.             returnVal = 1;
  771.         } else if(temp1.hl.lLow < temp2.hl.lLow) {
  772.             returnVal = -1;
  773.         } else {
  774.             returnVal = 0;
  775.         }
  776.         if(temp1.hl.lHigh < 0) {
  777.             returnVal = -returnVal;
  778.         }
  779.     }
  780.     return returnVal;
  781. }
  782.  
  783. Will that do it?
  784.  
  785. pr
  786. -- 
  787. Pete Resnick        (...so what is a mojo, and why would one be rising?)
  788. Graduate assistant - Philosophy Department, Gregory Hall, UIUC
  789. System manager - Cognitive Science Group, Beckman Institute, UIUC
  790. Internet: resnick@cogsci.uiuc.edu
  791.  
  792. +++++++++++++++++++++++++++
  793.  
  794. >From peter.lewis@info.curtin.edu.au (Peter N Lewis)
  795. Date: Thu, 21 Apr 1994 11:50:56 +0800
  796. Organization: NCRPDA, Curtin University
  797.  
  798. >What I would like to do is skip the conversion to LongDateRec's and then
  799. >compare the LongDateTime variables that are passed in.  Inside Mac: Text
  800. >says that the LongDateTime is a 64-bit signed representation of the number
  801. >of seconds since Jan 1, 1904.  So, I check the high-bit of both and compare
  802. >the high-order and low-order longs.  Seems to work most of the time.  However,
  803. >I get LongDateTime values that are negative using this scheme (high-order bit
  804. >set) sometimes even though the date is, for instance, 18 April 1994!
  805.  
  806. Well, LongDateTime is an 64-bit signed number.  But it's very unlikely
  807. that it fills more than 48 bits, right?  So why not take the bottom 24
  808. bits and the next 24 bits (and ignore the top 16 bits), and compare the
  809. top two first, and then the bottom two.  This only requires the date to be
  810. after 19040101, and before 2^48 seconds after that (8 million years I
  811. think :-).
  812.  
  813. type LongLongInt=record
  814.   hi:longInt;
  815.   lo:longInt;
  816. end;
  817.  
  818. var
  819.   c1,c2:LongDateTime;
  820.   l1,l2:LongLongInt;
  821. begin
  822.   l1:=LongLongInt(c1);
  823.   l1.hi:=BAND(BSL(l1.hi,8),$00FFFF00)+BAND(BSR(l1.lo,16),$000000FF);
  824.   l1.lo:=BAND(l1.lo,$00FFFFFF);
  825. ditto for l2
  826.   if l1.hi=l2.hi then
  827.     return l1.lo<l2.lo
  828.   else
  829.     return l1.hi<l2.hi
  830.   end-if
  831. end;
  832.  
  833. Something like that anyway,
  834.    Peter.
  835. _______________________________________________________________________
  836. Peter N Lewis <peter.lewis@info.curtin.edu.au>       Ph: +61 9 368 2055
  837.  
  838. +++++++++++++++++++++++++++
  839.  
  840. >From sparent@mv.us.adobe.com (Sean Parent)
  841. Date: Thu, 21 Apr 1994 21:17:50 GMT
  842. Organization: Adobe Systems Incorporated
  843.  
  844. Since LongDateTime is declared as a comp why not just use ">" - should at
  845. least work in MPW C and Pascal.
  846.  
  847. Sean
  848. In article <peter.lewis-210494115056@rocky.curtin.edu.au>,
  849. peter.lewis@info.curtin.edu.au (Peter N Lewis) wrote:
  850. > >What I would like to do is skip the conversion to LongDateRec's and then
  851. > >compare the LongDateTime variables that are passed in.  Inside Mac: Text
  852. > >says that the LongDateTime is a 64-bit signed representation of the number
  853. > >of seconds since Jan 1, 1904.  So, I check the high-bit of both and compare
  854. > >the high-order and low-order longs.  Seems to work most of the time.  However,
  855. > >I get LongDateTime values that are negative using this scheme (high-order bit
  856. > >set) sometimes even though the date is, for instance, 18 April 1994!
  857. > Well, LongDateTime is an 64-bit signed number.  But it's very unlikely
  858. > that it fills more than 48 bits, right?  So why not take the bottom 24
  859. > bits and the next 24 bits (and ignore the top 16 bits), and compare the
  860. > top two first, and then the bottom two.  This only requires the date to be
  861. > after 19040101, and before 2^48 seconds after that (8 million years I
  862. > think :-).
  863. > type LongLongInt=record
  864. >   hi:longInt;
  865. >   lo:longInt;
  866. > end;
  867. > var
  868. >   c1,c2:LongDateTime;
  869. >   l1,l2:LongLongInt;
  870. > begin
  871. >   l1:=LongLongInt(c1);
  872. >   l1.hi:=BAND(BSL(l1.hi,8),$00FFFF00)+BAND(BSR(l1.lo,16),$000000FF);
  873. >   l1.lo:=BAND(l1.lo,$00FFFFFF);
  874. > ditto for l2
  875. >   if l1.hi=l2.hi then
  876. >     return l1.lo<l2.lo
  877. >   else
  878. >     return l1.hi<l2.hi
  879. >   end-if
  880. > end;
  881. > Something like that anyway,
  882. >    Peter.
  883. > _______________________________________________________________________
  884. > Peter N Lewis <peter.lewis@info.curtin.edu.au>       Ph: +61 9 368 2055
  885.  
  886. --
  887. Sean Parent
  888.  
  889. +++++++++++++++++++++++++++
  890.  
  891. >From peter.lewis@info.curtin.edu.au (Peter N Lewis)
  892. Date: Sat, 23 Apr 1994 12:24:01 +0800
  893. Organization: NCRPDA, Curtin University
  894.  
  895. In article <sparent-210494141641@macb041.mv.us.adobe.com>,
  896. sparent@mv.us.adobe.com (Sean Parent) wrote:
  897.  
  898. >Since LongDateTime is declared as a comp why not just use ">" - should at
  899. >least work in MPW C and Pascal.
  900.  
  901. True - but it does it (at least in THINK Pascal) by calling zillions of
  902. _Pack4 (SANE) traps.  By the look of it, it converts the comp to an 80-bit
  903. floating point number and then compares it.  Not exactly efficient.  I
  904. just did a quick test on my LC3, and the SANE code for x<y required
  905. exactly ten times more time than the  code I posted.  Of course, on the
  906. PPC, things might well be different given the PPC executes floating point
  907. faster than integer anyway.
  908.    Peter.
  909. _______________________________________________________________________
  910. Peter N Lewis <peter.lewis@info.curtin.edu.au>       Ph: +61 9 368 2055
  911.  
  912. ---------------------------
  913.  
  914. >From alex@metcalf.demon.co.uk (Alex Metcalf)
  915. Subject: Copying graphics the fast way (in assembler)
  916. Date: Sat, 23 Apr 1994 18:38:29 GMT
  917. Organization: Demon Internet
  918.  
  919.  
  920. My (cheap) version of CopyBits, in assembler
  921. - ------------------------------------------
  922.  
  923.    After I mentioned in a previous note that I had written a custom
  924. copy routine, I got flooded with messages asking if I could post it for
  925. others to see or use. So, here it is!
  926.  
  927.    This code is taken directly from my new arcade game, to be released
  928. in the next couple of months. I know it may be possible to make the code
  929. faster, but it works fast enough for me. With this and similar routines
  930. in my game, I get an increase of up to 500% over CopyBits and CopyMask.
  931. This is mainly because I do far less checking than CopyBits does.
  932.  
  933.    Also note that (I assume unlike CopyBits) this code may actually draw
  934. to the screen when the electron beam is half way down the screen. So, the
  935. top half of your graphic may appear slightly after the bottom half. You
  936. need to read up on the Vertical Retrace manager and SlotVInstall if you
  937. want to "sync" your animation with the electron beam of the screen.
  938.  
  939.    The code copies a rectangle from an offscreen graphics world onto the
  940. screen. The following assumptions are made:
  941.  
  942. o   You're in 32-bit addressing mode
  943. o   The monitor is in 8-bit (256 colours/grays); 1 byte per pixel
  944. o   The cursor is hidden
  945. o   The source and destination rectangles are the same size
  946. o   The rectangles don't go off the screen or off the GWorld
  947. o   The rectangles are in coordinates which are local to the screen
  948.         (i.e. top left of screen is 0,0)
  949.  
  950.    There are four globals used:
  951.  
  952. o   gWorldPixMapBase is the pix map base address of the graphics world.
  953. You use GetGWorldPixMap to get the pix map, and then you use
  954. GetPixBaseAddr to get the base address.
  955.  
  956. o   gScreenPixMapBase is the pix map base address of the screen.
  957. You get the pix map from the GDHandle of the screen you're using. Then
  958. you use GetPixBaseAddr.
  959.  
  960.     If you're using the main monitor, you can get the GDHandle for that
  961. monitor by using GetMainDevice ().
  962.  
  963. o   gWorldRowByteCount is the rowBytes for the graphics world. You get
  964. it like this:
  965.  
  966. gWorldRowByteCount = (0x7FFF & (**tWorldPixMap).rowBytes);
  967.  
  968. o   gScreenRowByteCount is the rowBytes for the screen. You get it like
  969. this:
  970.  
  971. gScreenRowByteCount = (0x7FFF & (**tScreenPixMap).rowBytes);
  972.  
  973.  
  974.    I hope the code is useful to someone: you might try using the code,
  975. but it's much better if you read through and understand what's happening,
  976. and then use parts of it in your own game, animation app, or whatever.
  977.  
  978.    If you don't know how to read assembler, an excellent start is this
  979. book:
  980.  
  981. How to Write Macintosh Software
  982. by Scott Knaster
  983. Published by Addison Wesley
  984. ISBN 0-201-60805-7
  985.  
  986.    Have fun!
  987.  
  988.  
  989.  
  990.    Alex Metcalf
  991.    alex@metcalf.demon.co.uk
  992.  
  993.  
  994. void RectCopy (Rect tSourceRect, Rect tDestRect)
  995. {
  996.         asm
  997.         {
  998.                 movem.l a0-a1/d0-d7, -(sp);
  999.                 
  1000.                 move.l  gWorldPixMapBase, D0;
  1001.                 move.w  tSourceRect.top, D1;
  1002.                 ext.l   D1;
  1003.                 mulu.l  gWorldRowByteCount, D1;
  1004.                 add.l   D1, D0;
  1005.                 move.w  tSourceRect.left, D1;
  1006.                 ext.l   D1;
  1007.                 add.l   D1, D0;
  1008.                 move.l  D0, A0;     // A0 is the source
  1009.                 
  1010.                 move.l  gScreenPixMapBase, D0;
  1011.                 move.w  tDestRect.top, D1;
  1012.                 ext.l   D1;
  1013.                 mulu.l  gScreenRowByteCount, D1;
  1014.                 add.l   D1, D0;
  1015.                 move.w  tDestRect.left, D1;
  1016.                 ext.l   D1;
  1017.                 add.l   D1, D0;
  1018.                 move.l  D0, A1;     // A1 is the destination
  1019.                 
  1020.                 move.w  tSourceRect.right, D6;
  1021.                 move.w  tSourceRect.left, D0;
  1022.                 sub.w   D0, D6; 
  1023.                 ext.l   D6;         // D6 is the width of rect to copy
  1024.                 
  1025.                 move.l  gWorldRowByteCount, D2;
  1026.                 sub.l   D6, D2;     // D2 is the source row offset
  1027.                 
  1028.                 move.l  gScreenRowByteCount, D3;
  1029.                 sub.l   D6, D3;     // D3 is the destination row offset
  1030.                 
  1031.                 move.w  tSourceRect.bottom, D4;
  1032.                 move.w  tSourceRect.top, D0;
  1033.                 sub.w   D0, D4;
  1034.                 ext.l   D4;
  1035.                 subq.l  #1, D4;     // D6 is number of rows to copy
  1036.                 
  1037.                 moveq.l #4, D5;
  1038.                 
  1039.                 tst.l   D4;
  1040.                 ble.s   @6;
  1041.                 
  1042.                 move.l D6, D0;
  1043.                 divs.l D5, D0;
  1044.                 move.l D5, D7;
  1045.                 mulu.l D0, D7;
  1046.                 move.l D6, D1;
  1047.                 sub.l  D7, D1;
  1048.                 subq.l #1, D0;
  1049.                 subq.l #1, D1;
  1050.                 move.l D0, D6;
  1051.                 move.l D1, D7;
  1052.                 
  1053.                 @1;
  1054.                 tst.l D0;
  1055.                 blt.s @3;
  1056.                 
  1057.                 @2;
  1058.                 move.l (a0)+, (a1)+;
  1059.                 dbra d0,@2;
  1060.                 
  1061.                 @3;
  1062.                 tst.l D1;
  1063.                 blt.s @5;
  1064.                 
  1065.                 @4;
  1066.                 move.b (a0)+, (a1)+;
  1067.                 dbra d1,@4;
  1068.                 
  1069.                 @5;
  1070.                 adda.l D2, A0;
  1071.                 adda.l D3, A1;
  1072.                 move.l D6, D0;
  1073.                 move.l D7, D1;
  1074.                 dbra d4,@1;
  1075.                 
  1076.                 @6;
  1077.                 movem.l (sp)+, a0-a1/d0-d7;
  1078.         }
  1079. }
  1080.  
  1081.  
  1082. --
  1083. Alex Metcalf, Mac programmer in C, C++, HyperTalk, assembler
  1084.  
  1085. Internet, AOL, BIX: alex@metcalf.demon.co.uk            "Surely you
  1086. AppleLink:          alex@metcalf.demon.co.uk@internet#   can't be
  1087. CompuServe:         INTERNET:alex@metcalf.demon.co.uk    serious?"
  1088. Delphi:             alex@metcalf.demon.co.uk@inet#
  1089. FirstClass:         alex@metcalf.demon.co.uk,Internet   "I am serious...
  1090. Fax (UK):           (0570) 45636                         and don't call
  1091. Fax (US / Canada):  011 44 570 45636                     me Shirley."
  1092.  
  1093. ---------------------------
  1094.  
  1095. >From jake@dxal13.cern.ch (Bob Jacobsen)
  1096. Subject: Favorite C++ Book?
  1097. Date: Wed, 13 Apr 1994 21:50:36 GMT
  1098. Organization: CERN, the European Organization for Nuclear Research
  1099.  
  1100. What books do people recommend for C++ on the Mac?
  1101.  
  1102. Two suggestions have been:
  1103.  
  1104. 1) Learn C++ on the Macintosh, Dave Mark (1993).  Comes with Thin C++ and a
  1105. cheap (how much?) upgrade offer.
  1106.  
  1107. 2) Symantec C++ Programming for the Macintosh, Neil Rhodes and Julie
  1108. McKeehan
  1109.  
  1110. Neither of these is available at a local bookstore - if you had to order it
  1111. from the US and wait a month, which would you pick?
  1112.  
  1113. Bob Jacobsen, jake@afal01.cern.ch
  1114.  
  1115. +++++++++++++++++++++++++++
  1116.  
  1117. >From jaeger@kunikpok.icus.com (Jaeger)
  1118. Date: Thu, 14 Apr 94 11:36:11 CDT
  1119. Organization: Kunikpok Kennels and Komputers (Pet Project)
  1120.  
  1121. jake@dxal13.cern.ch (Bob Jacobsen) writes:
  1122.  
  1123. > What books do people recommend for C++ on the Mac?
  1124. > Two suggestions have been:
  1125. > 1) Learn C++ on the Macintosh, Dave Mark (1993).  Comes with Thin C++ and a
  1126. > cheap (how much?) upgrade offer.
  1127. > 2) Symantec C++ Programming for the Macintosh, Neil Rhodes and Julie
  1128. > McKeehan
  1129. > Neither of these is available at a local bookstore - if you had to order it
  1130. > from the US and wait a month, which would you pick?
  1131. > Bob Jacobsen, jake@afal01.cern.ch
  1132.  
  1133. Hi Bob,  
  1134. I can't tell you which one to get but I have the Rhodes and 
  1135. McKeehan book so I can tell you something about it.  The book is in three 
  1136. parts: The Symantec environment (120pp), Intro to C++ (200pp), Using TCL 
  1137. (180pp).  There are also several appendices, source listings and a disk 
  1138. with all the source from the book.  The authors say that the book is a 
  1139. practical approach not a comprehensive approach.  Believe them.  In my 
  1140. opinion the first section is a waste of space.  It repeats the 
  1141. information given in the Symantec manuals.  It is perhaps better than the 
  1142. material in the actual manuals :-/  but I think the space could have 
  1143. better been used to increase the size of sections two and three.  
  1144.  
  1145. The Intro to C++ section isn't that bad.  It gives you a lot of redundant 
  1146. information about how to use SC++ as does the first section.  It tells 
  1147. you how to use the class browser for instance (gee that's a toughie).  It 
  1148. has a long discussion of the global optimizer.  Apparently the authors 
  1149. wrote the book with a prerelease version of SC++6.0.  They go through 
  1150. excruciating detail (dissasembled code) to explain how the global 
  1151. optimizer works and of course they show all the places where it doesn't 
  1152. (didn't?) work.  IMHO most of this is useless.  The actual intro to C++' 
  1153. is useful and I learned some things from it.  It should have been longer 
  1154. and more complete.  For example the discussion of multiple inheritance is 
  1155. about 1.5 pages.  The discussion of segmentation of your project in the 
  1156. first section is about 2 pages.  Which do you think is more important?
  1157.  
  1158. The third section has six chapters with code examples in each.  I would 
  1159. say that these are informative.  There are some useful tips about using 
  1160. TCL and using C++ in these chapters.  However, this book doesn't cover 
  1161. some of the more advanced features of C++ like templates and friends (and 
  1162. probably others that I've never heard of).
  1163.  
  1164. I suppose that my problem was that I wanted an in-depth book about C++ 
  1165. that emphasized the Mac, and such a book doesn't exist.
  1166.  
  1167. There are a couple of annoying things about the book.  All the TCL 
  1168. documentation uses the terms 'instance variable' and 'method'.  The book 
  1169. uses the terms 'member variable' and 'member function' and never mentions 
  1170. that these are the same thing.  Also, the book uses an icon of a 5.25 
  1171. floppy next to many of the source code examples.  I wonder if the 
  1172. authors' 'Macs' use these :-/
  1173.  
  1174. Basically I don't think the book is worth US$40.  Also it's obsolete now 
  1175. that SC++7 and TCL 2.0 are out.  Look for the sequel.
  1176.  
  1177. Brian Stern  }:-{)}
  1178. Jaeger@fquest.com
  1179.  
  1180.  
  1181. +++++++++++++++++++++++++++
  1182.  
  1183. >From fixer@faxcsl.dcrt.nih.gov (Chris Gonna' Find Ray Charles Tate)
  1184. Date: Fri, 15 Apr 1994 14:29:11 GMT
  1185. Organization: DCRT, NIH, Bethesda, MD
  1186.  
  1187. In addition to learning C++, I'm going to assume you want to learn how
  1188. to program in an object-oriented manner.  This is not trivial; it
  1189. involves learning a new way of approaching programming, and of thinking
  1190. about things.
  1191.  
  1192. I recommend the book "Developing Object-Oriented Software on the
  1193. Macintosh," by Goldstein and Alger.  It's part of the Macintosh
  1194. Inside-Out series from Addison-Wesley, though I don't have its
  1195. ISBN number handy.  I *do* know that it's Addison-Wesley #57065,
  1196. list price $24.95.
  1197.  
  1198. It's an excellent discussion of the theoretical foundations of why
  1199. object-oriented software development is good, why it's hard to learn,
  1200. and what you can do about it.  The book also presents a (IMHO good)
  1201. methodology and notation for developing OO software.
  1202.  
  1203. - -------------------------------------------------------------
  1204. Christopher Tate             |  "So he dropped the heart - 
  1205. MSD, Inc.                    |     the floor's clean."
  1206. fixer@faxcsl.dcrt.nih.gov    |                 - Sidney Harris
  1207.  
  1208. +++++++++++++++++++++++++++
  1209.  
  1210. >From John Brewer <jbrewer@wri.com>
  1211. Date: Sat, 16 Apr 1994 16:41:49 GMT
  1212. Organization: Wolfram Research, Inc.
  1213.  
  1214. In article <jake-130494225036@csacbl6.cern.ch> Bob Jacobsen,
  1215. jake@dxal13.cern.ch writes:
  1216. >What books do people recommend for C++ on the Mac?
  1217.  
  1218. I'd recommend some general C++ books to start out with.  Once you've
  1219. mastered the syntax and the key concepts of the language, then you can
  1220. branch out into platform-specific things like GUI frameworks.  Trying to
  1221. do everything at once will result in information overload.
  1222.  
  1223. If I were teaching a C++ class right now, I'd have the following books be
  1224. required reading:
  1225. Lippman, Stanley _The C++ Primer_ (If you don't know C) OR
  1226. Pohl, Ira(?) _C++ for C Programmers_ (If you do know C)
  1227. Budd, Timothy _An Introduction to Object Oriented Programming_
  1228.  
  1229. The following would be recommended supplemental reading:
  1230. Meyers, Scott _Effective C++_
  1231.  
  1232. You'll probably also want to pick up one or both of the following for
  1233. reference:
  1234. Stroustrup, Bjarne _The C++ Programming Language_
  1235. Ellis & Stroustrup _The Annotated C++ Reference Manual_
  1236.  
  1237. The reason I recommend either Lippman or Pohl is that, while Lippman is
  1238. probably the better book, it assumes you have no knowledge of C.  Since
  1239. Ihave over a decade of experience with C, I resent being told what a
  1240. "break" statement is again.  I also find that when I try to skip over
  1241. the stuff I already know, I invariably skip some new stuff by mistake. 
  1242. Pohl assumes you know C, and therefore only covers the differences.  I
  1243. appreciate this approach.
  1244.  
  1245. Budd is a general book on object-oriented programming.  It deals with
  1246. primarily with general concepts, not syntax, and has examples in C++,
  1247. Objective C, Object Pascal, and Smalltalk.  It introduces the concepts
  1248. of classes and inheritance, as well as responsibility-driven design and
  1249. CRC cards.
  1250.  
  1251. Meyers is the best _second_ book on C++ that I know of.  It contains a
  1252. lot of general tips for writing better code.  The introduction alone
  1253. explained copy constructors better than some entire books.
  1254.  
  1255. I don't recommend Stroustrup as an introduction to C++, as it is way too
  1256. terse, but you really need it and/or the ARM as a language reference.
  1257.  
  1258. Good luck!
  1259.  
  1260. John Brewer
  1261. Wolfram Research, Inc.
  1262. (but speaking for myself)
  1263.  
  1264. +++++++++++++++++++++++++++
  1265.  
  1266. >From nick@pitt.edu ( nick.c )
  1267. Date: 20 Apr 94 01:48:56 GMT
  1268. Organization: (none)
  1269.  
  1270. In Article <jake-130494225036@csacbl6.cern.ch>, jake@dxal13.cern.ch (Bob
  1271. Jacobsen) wrote:
  1272. >What books do people recommend for C++ on the Mac?
  1273. >
  1274. >Two suggestions have been:
  1275. >
  1276. >1) Learn C++ on the Macintosh, Dave Mark (1993).  Comes with Thin C++ and a
  1277. >cheap (how much?) upgrade offer.
  1278.  
  1279.    Dave's book is good (I have it), but is kind of a "vol 2" to his
  1280.     _Learn_C_on_the_Macintosh_, I think it would be hard to learn from
  1281.     unless you'd read "vol 1".  If you're already an ace at C - you'll
  1282.     probably get a lot out of it.
  1283.  
  1284.    I found an interesting book called _Symantec_C++_for_the_Macintosh:_
  1285.     the_Basics_, by John May and Judy Whittle.  It trys to explain
  1286.     C++ without refering to C, and is very specific to the Symantec
  1287.     environment.  Unlike the two books you mentioned, this one is 
  1288.     stand alone (kind of impressive when you think of what it's trying
  1289.     cover).  It's not as detailed as having a seperate book on
  1290.     C, on your environment, and on C++ - but it's very convenient to
  1291.     have most of that info in one cover, and have it all with respect
  1292.     to Symantec's environment.
  1293.  
  1294.                                         -- nick
  1295.  
  1296.  
  1297.  
  1298.    _/   _/  _/  _/_/_/   _/   _/  Sea Shells to C shells,  Waikiki to
  1299.   _/_/ _/  _/  _/   _/  _/_/_/     the Internet, a wave, is a wave...
  1300.  _/ _/_/  _/  _/       _/ _/
  1301. _/   _/  _/   _/_/_/  _/   _/  CompSrv: 71232,766 I-Net: Nick@pitt.edu
  1302.  
  1303.  
  1304. +++++++++++++++++++++++++++
  1305.  
  1306. >From wang_dj@dev.gdb.org (David J. Wang)
  1307. Date: Thu, 21 Apr 1994 00:24:07 GMT
  1308. Organization: Genome Database
  1309.  
  1310. nick.c (nick@pitt.edu) wrote:
  1311. >In Article <jake-130494225036@csacbl6.cern.ch>, jake@dxal13.cern.ch (Bob
  1312. >Jacobsen) wrote:
  1313. >>What books do people recommend for C++ on the Mac?
  1314. >>
  1315. >>Two suggestions have been:
  1316. >>
  1317. >>1) Learn C++ on the Macintosh, Dave Mark (1993).  Comes with Thin C++ and a
  1318. >>cheap (how much?) upgrade offer.
  1319.  
  1320. >   Dave's book is good (I have it), but is kind of a "vol 2" to his
  1321. >    _Learn_C_on_the_Macintosh_, I think it would be hard to learn from
  1322. >    unless you'd read "vol 1".  If you're already an ace at C - you'll
  1323. >    probably get a lot out of it.
  1324.  
  1325. I have a different opinion about this -- I Learn C on the Macintosh --
  1326. and found it to be inadequate in dealing with both C as well as the
  1327. Macintosh.  There is a minimal amount of information dealing with the
  1328. macintosh (I now have Macintosh C Programming Vol. and wouldn't know
  1329. what to do without iit -- although I wish I didn't have to pay $30 for
  1330. the source on disk), and a barely adequate amount of info. dealing
  1331. with C. I looked through Learn C++... today, and it appeared to be the same
  1332. situation. 
  1333.  
  1334. I hear from others around here that the Pohl book is very good
  1335. however, and I own C by Dissection (Pohl, Kelley).
  1336. --
  1337. *************************************************************************
  1338. David J. Wang                 #include <std_disclaimer>
  1339. wang_dj@gdb.org                 (410)614-0393
  1340. wang_dj@server.cs.jhu.edu         Biology@The Johns Hopkins University
  1341.                      Baltimore, Maryland 21210
  1342. ************************************************************************/
  1343.  
  1344. +++++++++++++++++++++++++++
  1345.  
  1346. >From bootstrap1@aol.com (Bootstrap1)
  1347. Date: 23 Apr 1994 22:56:02 -0400
  1348. Organization: America Online, Inc. (1-800-827-6364)
  1349.  
  1350. In Article <jake-130494225036@csacbl6.cern.ch>, jake@dxal13.cern.ch (Bob
  1351. Jacobsen) wrote:
  1352. > What books do people recommend for C++ on the Mac?
  1353.  
  1354. I bought Stroustrup's The C++ Programming Language a few years ago and really
  1355. didn't care for it.  I've looked for a really good book on the subject ever
  1356. since and last year came across Bruce Eckel's C++ Inside & Out.  For me, it hit
  1357. the nail on the head; it was easy to read, gave good examples, and, best of
  1358. all, gave insight on the workings of the language behind the scenes, something
  1359. a lot of C++ books neglect.
  1360.  
  1361. ---------------------------
  1362.  
  1363. >From jberry@teleport.com (James D. Berry)
  1364. Subject: Native PPC Interrupt Control?
  1365. Date: Thu, 14 Apr 1994 14:57:47 -0700
  1366. Organization: Consultant
  1367.  
  1368. Is there interface level support for disabling interrupts on the PowerMac?
  1369. I know that application code runs at User Level, but haven't tried hitting
  1370. the EE bit in the MSR (which I would presume would cause an exception that
  1371. might or might not get properly emulated). Is this the only level of
  1372. support? Or is there some hook into the nanokernel to set the interrupt
  1373. level?
  1374.  
  1375. This is required to enforce mutual exclusion (since we don't yet have good
  1376. kernel level support--I want V1/NuKernel!) and I don't want to enter the
  1377. emulator just to modify the interrupt level.
  1378.  
  1379. -- 
  1380. James Berry
  1381. jberry@teleport.com
  1382.  
  1383. +++++++++++++++++++++++++++
  1384.  
  1385. >From creiman@netcom.com (Charlie Reiman)
  1386. Date: Fri, 15 Apr 1994 07:07:27 GMT
  1387. Organization: NETCOM On-line Communication Services (408 241-9760 guest)
  1388.  
  1389. jberry@teleport.com (James D. Berry) writes:
  1390.  
  1391. >Is there interface level support for disabling interrupts on the PowerMac?
  1392. >I know that application code runs at User Level, but haven't tried hitting
  1393. >the EE bit in the MSR (which I would presume would cause an exception that
  1394. >might or might not get properly emulated). Is this the only level of
  1395. >support? Or is there some hook into the nanokernel to set the interrupt
  1396. >level?
  1397.  
  1398. >This is required to enforce mutual exclusion (since we don't yet have good
  1399. >kernel level support--I want V1/NuKernel!) and I don't want to enter the
  1400. >emulator just to modify the interrupt level.
  1401.  
  1402. I can't say for sure about disabling interrupts, but I have been
  1403. attacked by user mode limits on my PPC hacking. If all you need is
  1404. simple mutex stuff, get a 601 manual and look in the back for the code
  1405. examples covering mutuexes (mutexi? or is that a breakfast cereal...)
  1406. Or just look up information on load/store with reservation.
  1407. -- 
  1408. "You can't cancel the project! We already made the T-shirts!"
  1409. Charlie Reiman
  1410. creiman@netcom.com
  1411.  
  1412. +++++++++++++++++++++++++++
  1413.  
  1414. >From rang@winternet.mpls.mn.us (Anton Rang)
  1415. Date: 16 Apr 1994 00:02:23 GMT
  1416. Organization: Minnesota Angsters
  1417.  
  1418. In article <creimanCoAH4G.BJG@netcom.com> creiman@netcom.com (Charlie Reiman) writes:
  1419. >If all you need is simple mutex stuff, get a 601 manual and look in
  1420. >the back for the code examples covering mutuexes (mutexi? or is that
  1421. >a breakfast cereal...)  Or just look up information on load/store
  1422. >with reservation.
  1423.  
  1424.   That works great if you have two competing user-level threads.  If
  1425. you're trying to synchronize against interrupt-level routines (like an
  1426. I/O completion routine, driver, VBL task), you can't easily use a
  1427. mutex because there's no convenient way to ask the system to schedule
  1428. the running task for a later time.
  1429.  
  1430.   Of course, you can always implement your own process scheduler and
  1431. run everything through it (I did this once for a Nubus card driver
  1432. back when I was young and foolish).  But it's very difficult to make
  1433. sure that every case is properly handled, and it shouldn't be that
  1434. much work....
  1435. --
  1436. Anton Rang (rang@winternet.mpls.mn.us)
  1437.  
  1438. +++++++++++++++++++++++++++
  1439.  
  1440. >From rang@winternet.mpls.mn.us (Anton Rang)
  1441. Date: 15 Apr 1994 00:23:58 GMT
  1442. Organization: Minnesota Angsters
  1443.  
  1444. In article <jberry-140494145747@ppp-005.teleport.com> jberry@teleport.com (James D. Berry) writes:
  1445. >Is there interface level support for disabling interrupts on the PowerMac?
  1446.  
  1447.   There is absolutely no documented way to do this, and I'm very leery
  1448. of digging into the nanokernel to do it.  I've had several engineers
  1449. from Apple tell me that I shouldn't even think about it.  No word yet
  1450. on whether this will be added at some point, though I've heard that
  1451. the group working on porting the Appletalk protocol stack has
  1452. requested such a capability.
  1453.  
  1454.   I understand *why* they don't want people messing with interrupts
  1455. (especially with Geoport support and such), but at the same time, it's
  1456. a major bottleneck in the driver-level work I'm doing.
  1457.  
  1458. >This is required to enforce mutual exclusion (since we don't yet have good
  1459. >kernel level support--I want V1/NuKernel!) and I don't want to enter the
  1460. >emulator just to modify the interrupt level.
  1461.  
  1462.   And if you enter the emulator, it only modifies the emulator's
  1463. interrupt level.  You can still get low-level interrupts, though I
  1464. believe that currently all system-call-back interrupts (e.g. VBL
  1465. tasks, Time Manager, etc.) go through the emulator and thus obey the
  1466. restriction.
  1467.  
  1468.   I need mutual exclusion for a memory pool (darn Memory Manager won't
  1469. run at interrupt time :-), and an allocation/free pair which takes 4us
  1470. in PPC code takes nearly 100us if I switch into and out of emulation
  1471. for it.  Really sucks.
  1472.  
  1473.  Anyone from Apple listening to our pleas?  (Anyone with the $$$ to be
  1474. an Apple Partner who might have clout enough to let us call the
  1475. nanokernel for this until NuKernel is out?)
  1476. --
  1477. Anton Rang (rang@winternet.mpls.mn.us)
  1478. >From Eric Anderson <eric_anderson@quickmail.apple.com>
  1479. Subject: Native PPC Interrupt Control?
  1480. Date: Tue, 19 Apr 1994 03:06:46 GMT
  1481. Organization: Apple Computer
  1482.  
  1483. Re: Native PPC Interrupt Control?
  1484.  
  1485.  
  1486. Yes, folks here at Apple are listening to your pleas. In fact, if you
  1487. look at the native Thread Manager, you will note the lack of preemptive
  1488. threads - this is because the native interrupt runtime model is not
  1489. exported outside the kernel. Yes, we need to wait for the new kernel
  1490. before we get such native niceties as native interrupt handling (in some
  1491. form(s)) to provide better I/O and tasking services both inside Apple and
  1492. from our developer community.
  1493.  
  1494. Eric Anderson
  1495. Mac OS
  1496. Apple Computer, Inc.
  1497.  
  1498. +++++++++++++++++++++++++++
  1499.  
  1500. >From benh@fdn.org (Benjamin Herrenschmidt)
  1501. Date: Tue, 19 Apr 94 23:01:05 +0100
  1502. Organization: (none)
  1503.  
  1504. >
  1505. >In article <RANG.94Apr14192358@icicle.winternet.mpls.mn.us> (comp.sys.mac.programmer), rang@winternet.mpls.mn.us (Anton Rang) writes:
  1506. >
  1507. >In article <jberry-140494145747@ppp-005.teleport.com> jberry@teleport.com (James D. Berry) writes:
  1508. >>Is there interface level support for disabling interrupts on the PowerMac?
  1509. >
  1510. >  There is absolutely no documented way to do this, and I'm very leery
  1511. >of digging into the nanokernel to do it.  I've had several engineers
  1512. >from Apple tell me that I shouldn't even think about it.  No word yet
  1513. >on whether this will be added at some point, though I've heard that
  1514. >the group working on porting the Appletalk protocol stack has
  1515. >requested such a capability.
  1516. >
  1517. >  I understand *why* they don't want people messing with interrupts
  1518. >(especially with Geoport support and such), but at the same time, it's
  1519. >a major bottleneck in the driver-level work I'm doing.
  1520. >
  1521. >>This is required to enforce mutual exclusion (since we don't yet have good
  1522. >>kernel level support--I want V1/NuKernel!) and I don't want to enter the
  1523. >>emulator just to modify the interrupt level.
  1524. >
  1525. >  And if you enter the emulator, it only modifies the emulator's
  1526. >interrupt level.  You can still get low-level interrupts, though I
  1527. >believe that currently all system-call-back interrupts (e.g. VBL
  1528. >tasks, Time Manager, etc.) go through the emulator and thus obey the
  1529. >restriction.
  1530. >
  1531. >  I need mutual exclusion for a memory pool (darn Memory Manager won't
  1532. >run at interrupt time :-), and an allocation/free pair which takes 4us
  1533. >in PPC code takes nearly 100us if I switch into and out of emulation
  1534. >for it.  Really sucks.
  1535. >
  1536. > Anyone from Apple listening to our pleas?  (Anyone with the $$$ to be
  1537. >an Apple Partner who might have clout enough to let us call the
  1538. >nanokernel for this until NuKernel is out?)
  1539. >--
  1540. >Anton Rang (rang@winternet.mpls.mn.us)
  1541.  
  1542. I completely agree with you ! as a Nubus card driver designer and
  1543. a low level developper (i work on drivers, interrupts, network software
  1544. etc...), a way to mask interrupts is VERY important. It is the only
  1545. way to do some tasks at interrupt level. Another VERY important thing
  1546. is to be able to do atomic read-test-modify like the TAS instruction
  1547. of the 68K to do semaphores. They are REQUIRED to work with "resources"
  1548. shared between several processors. (main processor and a DSP for example).
  1549.  
  1550. It would be a VERY BAD thing from apple to remove the ability of having
  1551. uninterruptible pieces of code and atomic semaphores.
  1552.  
  1553. I hope Apple will soon release a technote with everything we MUST
  1554. know about these. (remeber that not all macintoshes support the TAS
  1555. instruction which is really a pain when you have to build an interface
  1556. between the mac and another processor, on a PDS card for example).
  1557.  
  1558. Hey, Apple ! do you listen to us ? will you do it ?
  1559.  
  1560. BenH.
  1561.  
  1562.  
  1563. +++++++++++++++++++++++++++
  1564.  
  1565. >From mrustad@aol.com (MRustad)
  1566. Date: 23 Apr 1994 01:05:05 -0400
  1567. Organization: America Online, Inc. (1-800-827-6364)
  1568.  
  1569. In article <01050105.tk4phy@tatooine.fdn.org>, benh@fdn.org (Benjamin
  1570. Herrenschmidt) writes:
  1571.  
  1572. >I hope Apple will soon release a technote with everything we MUST
  1573. >know about these. (remeber that not all macintoshes support the TAS
  1574. >instruction which is really a pain when you have to build an interface
  1575. >between the mac and another processor, on a PDS card for example).
  1576.  
  1577. Ben,
  1578.  
  1579. TAS is not all that important. I did the multiprocessor interlocking for A/ROSE
  1580. and could not use TAS at all anywhere (even for single processor
  1581. locks) due to nasty bus error conditions that could arise with the 68000
  1582. coprocessors. In previous positions I worked on CDC Cybers that had a bunch of
  1583. processors in the box and nothing remotely like a TAS. There are lots of neat
  1584. tricks that really work better than TAS anyway.
  1585.  
  1586. Of course, you can continue to use the emulator, which does TAS for you, if it
  1587. is that important to you (but my stuff will run faster than yours!).
  1588.  
  1589. -Mark Rustad, mdr@apple.com
  1590.  
  1591. ---------------------------
  1592.  
  1593. >From walkerm@acf2.nyu.edu (Michael A. Walker)
  1594. Subject: SetDialogDefaultItem in a modal dialog
  1595. Date: Wed, 20 Apr 1994 09:15:01 -0500
  1596. Organization: New York University
  1597.  
  1598. Hi. Please forgive this question if it's a FAQ.  I'm trying to use 
  1599. SetDialogDefaultItem for a modal dialog and I'm having some
  1600. problems (well, one problem--it's not working ;-).  Within my 
  1601. routine that displays the dialog, I call SetDialogDefaultItem
  1602. as I'm suppose to do.  The problem comes in when I call
  1603. ModalDialog using my own dialog filter which is used to control
  1604. a read-only scrolling text region.  Somehow, the call to 
  1605. SetDialogDefaultItem is reversed or ignored since I added the
  1606. dialog filter.  Here is a snippet of the code:
  1607.  
  1608. void ShowAbout(void)
  1609. {
  1610.     DialogPtr        dialog;
  1611.     Boolean        dialogDone = false;
  1612.     short        itemHit, itemType;
  1613.  
  1614. /* deleted stuff */
  1615.     
  1616.     dialog = GetNewDialog(kAboutResID, nil, kMoveToFront);
  1617.     
  1618.     SetDialogDefaultItem(dialog, ok);
  1619.     SetDialogTracksCursor(dialog, true);
  1620.         
  1621. /* deleted stuff */
  1622.  
  1623.     ShowWindow(dialog);
  1624.     SetPort(dialog);
  1625.     
  1626.     GetDItem(dialog, ok, &itemType, &okItemHandle, &itemRect);    
  1627.     
  1628.     /* you guessed it, more deleted stuff */
  1629.     
  1630.     while (! dialogDone) {
  1631.         ModalDialog(AboutDlgFilter, &itemHit);
  1632.         switch (itemHit) {
  1633.             case ok:
  1634.                 dialogDone = true;
  1635.                 break;
  1636.         }
  1637.     }
  1638.     
  1639.     DisposDialog(dialog);
  1640. }
  1641.  
  1642. Is there something else I have to do?
  1643.  
  1644. Thanks in advance.
  1645.  
  1646. -- 
  1647. Michael A. Walker
  1648. New York University
  1649. walkerm@acf2.nyu.edu
  1650. ==============================================------------------------8-;
  1651. main() {int x,y,k;char *b=" .:,;!/>)|&IH%*#@";double
  1652. cr,ci,zr,zi,temp,cx,cy;
  1653. for(y=30;puts(""),cy=y*0.1-1.5,y-->=0;){for(x=0;cx=x*0.04-2,zr=0,zi=0,x++<75;)
  1654. {for(cr=cx,ci=cy,k=0;temp=zr*zr-zi*zi+cr,zi=2*zr*zi+ci,zr=temp,k<112;k++)
  1655. if(zr*zr+zi*zi>10)break;printf("%c",b[k%16]);}}}      /*  try this on for
  1656. size!!  */
  1657.  
  1658. +++++++++++++++++++++++++++
  1659.  
  1660. >From Kevin.R.Boyce@gsfc.nasa.gov (Kevin R. Boyce)
  1661. Date: Wed, 20 Apr 1994 12:46:05 -0400
  1662. Organization: NASA/GSFC
  1663.  
  1664. In article <walkerm-200494091501@walker.infocenter.nyu.edu>,
  1665. walkerm@acf2.nyu.edu (Michael A. Walker) wrote:
  1666.  
  1667. > Hi. Please forgive this question if it's a FAQ.  I'm trying to use 
  1668. > SetDialogDefaultItem for a modal dialog and I'm having some
  1669. > problems (well, one problem--it's not working ;-).  Within my 
  1670. > routine that displays the dialog, I call SetDialogDefaultItem
  1671. > as I'm suppose to do.  The problem comes in when I call
  1672. > ModalDialog using my own dialog filter which is used to control
  1673. > a read-only scrolling text region.  Somehow, the call to 
  1674. > SetDialogDefaultItem is reversed or ignored since I added the
  1675. > dialog filter.
  1676.  
  1677. You didn't include your dialog filter, but I bet it doesn't call the
  1678. standard filter proc.  Here's one that doesn't handle any dialog events,
  1679. but correctly passes update events on to other windows (this is taken
  1680. almost verbatim from the "Pending Update Perils" technote):
  1681.  
  1682. pascal Boolean BasicDlogFilter( DialogPtr currentDialog,
  1683.  EventRecord *theEventIn, short *theDialogItem)
  1684. {
  1685.     OSErr                myErr;
  1686.     ModalFilterProcPtr    standardProc;
  1687.     Boolean                returnVal = false;
  1688.     WindowPtr            temp;
  1689.     
  1690.     if( (theEventIn->what == updateEvt) &&
  1691.      (theEventIn->message != (long)currentDialog) )
  1692.     {
  1693.         returnVal = DoUpdate(theEventIn);    /* go to my update routine */  
  1694.     }
  1695.     else
  1696.     { 
  1697.         GetPort(&temp);
  1698.         SetPort(currentDialog);
  1699.         myErr = GetStdFilterProc((ProcPtr)&standardProc);
  1700.         if(!myErr)
  1701.             returnVal = standardProc( currentDialog, theEventIn, theDialogItem );
  1702.         SetPort(temp);
  1703.     }
  1704.     return(returnVal);
  1705. }
  1706.  
  1707. (Apologies if the formatting is screwed up.  Boy I wish NewsWatcher handled
  1708. tabs correctly.  Time to take another look at the source...)
  1709.  
  1710.  
  1711. -- 
  1712. Kevin      Kevin.R.Boyce@x500.gsfc.nasa.gov
  1713. You can blow out a candle, but you can't blow out a fire.
  1714. Once the flame begin to catch, the wind will blow it higher.
  1715.            --Peter Gabriel, 1980  (_Biko_)
  1716.  
  1717. +++++++++++++++++++++++++++
  1718.  
  1719. >From Stephan Bublava <stephan@iguwnext.tuwien.ac.at>
  1720. Date: 21 Apr 1994 06:08:54 GMT
  1721. Organization: Vienna University of Technology
  1722.  
  1723. In article <walkerm-200494091501@walker.infocenter.nyu.edu> Michael A.
  1724. Walker, walkerm@acf2.nyu.edu writes:
  1725.  
  1726. >Hi. Please forgive this question if it's a FAQ.  I'm trying to use 
  1727. >SetDialogDefaultItem for a modal dialog and I'm having some
  1728. >problems (well, one problem--it's not working ;-). 
  1729.  
  1730. >[snip]
  1731.  
  1732. >Somehow, the call to SetDialogDefaultItem is reversed or ignored
  1733. >since I added the dialog filter.
  1734.  
  1735. You must call the default filter from your modal dialog filter.
  1736. How to to this is described in the TechNote that describes the
  1737. new Dialog Manager routines.
  1738.  
  1739. Stephan
  1740.  
  1741. --
  1742. Stephan Bublava
  1743. stephan@iguwnext.tuwien.ac.at
  1744.  
  1745. ---------------------------
  1746.  
  1747. >From baileyc@gmg.com (Christopher R. Bailey)
  1748. Subject: Symantec has an FTP site!
  1749. Date: 22 Apr 1994 15:34:28 GMT
  1750. Organization: DejaView Software, Inc.
  1751.  
  1752. Maybe most of you already know this, but I didn't and I've never seen anything
  1753. about it.  I was sick of waiting for the CPlusLib update from Symantec for
  1754. 7.0.  So I called them, and the guy told me to ftp to their site:
  1755.  
  1756.     devtools.symantec.com
  1757.  
  1758. Sure enough it was there, along with all the other updates.  Now, why couldn't
  1759. Symantec post on here telling us about that?  I realize they may not want
  1760. their ftp machine getting loaded up, but if they don't, then they should have
  1761. posted it to Sumex (as if we can get in there).  I wasted a phone call, as 
  1762. well as I've probably now started that totally lame limited 90 days of support
  1763. crap that they've started.  What a joke!  (Hmm, it seems Symantec bashing is
  1764. now a required part of every post on these groups :)
  1765.  
  1766. -- 
  1767. ________________________________________________________
  1768.   Christopher Bailey        Work: baileyc@dejaview.com 
  1769.   Software Engineer         Home: baileyc@beetle.com      
  1770.   DejaView Software Inc.    http://bigmac.gmg.com/
  1771.  
  1772. ---------------------------
  1773.  
  1774. >From Ben J Fry <bf2c+@andrew.cmu.edu>
  1775. Subject: pascal and c libraries
  1776. Date: Tue, 19 Apr 1994 21:31:59 -0400
  1777. Organization: Freshman, Design, Carnegie Mellon, Pittsburgh, PA
  1778.  
  1779. is there any way to write a function in think pascal and have it
  1780. available for use in a think c project? how would this be done, and how
  1781. would you do the opposite, compiling something in c and calling it from
  1782. pascal?
  1783.  
  1784. thanks in advance...
  1785.  
  1786. ben
  1787. bf2c+@andrew.cmu.edu
  1788.  
  1789. +++++++++++++++++++++++++++
  1790.  
  1791. >From ingemar@lysator.liu.se (Ingemar Ragnemalm)
  1792. Date: 22 Apr 1994 09:24:52 GMT
  1793. Organization: (none)
  1794.  
  1795. Ben J Fry <bf2c+@andrew.cmu.edu> writes:
  1796.  
  1797. >is there any way to write a function in think pascal and have it
  1798. >available for use in a think c project? how would this be done, and how
  1799. >would you do the opposite, compiling something in c and calling it from
  1800. >pascal?
  1801.  
  1802. Both are quite possible. I've even had projects where I write a lib mostly
  1803. in Pascal, but calling a C-lib (for the inline assembler). Then I make a
  1804. library of it, so my C-using friend can use it. That means that the code
  1805. has three layers, C-Pascal-C!
  1806.  
  1807. Using C from Pascal is simple. The C functions must be declared "Pascal".
  1808. You build a library and write an interface file.
  1809.  
  1810. Using Pascal from C takes a bit more, mostly due to limitations in the
  1811. Think compilers, and very poor documentation. (May I say "bugs"?)
  1812.  
  1813. You build a library from the Pascal code and convert it with oConv.
  1814.  
  1815. BUT something is wrong with how either Think Pascal sets the function names
  1816. or how oConv converts them, so capitalization might get wrong. You can fix
  1817. that by checking the ".v" box, edit the .v file to he correct capitalization
  1818. in the cases where you get problems, and then oConv again, still with ".v"
  1819. checked.
  1820.  
  1821. BUT your Pascal library might rely on some of Think Pascal's built-in
  1822. functions, usually LMUL and LDIV. The fix I've been recommended, and that
  1823. I am using, is to include uRuntime.lib in the Pascal library. This works
  1824. just great with Think C 5. (Note that Symantec's support people seem to
  1825. know nothing about how to do this.)
  1826.  
  1827. BUT Think C version 6 has a bug in its linker! If you include uRuntime.lib,
  1828. you get a link error telling you that a function isn't defined - a function
  1829. that is in the ROM's since 1984! (MaxApplZone if I remember right.) This can
  1830. be fixed by opening the library and remove a segemnt that is named %_TOOLBOX
  1831. (or something like that).
  1832.  
  1833. BUT that is only possible using Think C 5! If you don't have Think C 5,
  1834. you'll have to ask someone who has it to do it. I guess we could convert
  1835. uRuntime.lib to a C library and remove it, and post...
  1836.  
  1837. BUT is that legal, or is it breaking some copyright that Symantec has?
  1838.  
  1839. If you have Think C 5, it isn't a big problem.
  1840.  
  1841. The whole problems should be simpler with CodeWarrior. Can anyone confirm
  1842. that?
  1843.  
  1844.  
  1845.  
  1846. --
  1847. - -
  1848. Ingemar Ragnemalm, PhD
  1849. Image processing, Mac shareware games
  1850. E-mail address: ingemar@isy.liu.se or ingemar@lysator.liu.se
  1851.  
  1852. ---------------------------
  1853.  
  1854. End of C.S.M.P. Digest
  1855. **********************
  1856.  
  1857.  
  1858.  
  1859.